package demo12.gumballRemote;

import java.util.Random;



public class HasQuarterState implements State{

	private static final long serialVersionUID = 2L;
	Random randomWinner = new Random(System.currentTimeMillis());
	
	transient GumballMachine gumballMachine;
 /*
  * Java transient关键字使用小结
1、transient关键字只能修饰变量，而不能修饰方法和类。注意，本地变量是不能被transient关键字修饰的。
2、被transient关键字修饰的变量不再能被序列化，一个静态变量不管是否被transient修饰，均不能被序列化。
3、一旦变量被transient修饰，变量将不再是对象持久化的一部分，该变量内容在序列化后无法获得访问。
也可以认为在将持久化的对象反序列化后，被transient修饰的变量将按照普通类成员变量一样被初始化*/
	public HasQuarterState(GumballMachine gumballMachine) {
		this.gumballMachine = gumballMachine;
	}
  
	@Override
	public void insertQuarter() {
		System.out.println("你不能投入另一个25分");
	}
 
	@Override
	public void ejectQuarter() {
		System.out.println("已经退还25分");
		gumballMachine.setState(gumballMachine.getNoQuarterState());
	}
 
	@Override
	public void turnCrank() {
		System.out.println("得到糖果...");
		int winner = randomWinner.nextInt(10);//1-10
		if ((winner == 0) && (gumballMachine.getCount() > 1)) {
			gumballMachine.setState(gumballMachine.getWinnerState());
		} else {
			gumballMachine.setState(gumballMachine.getSoldState());
		}
	}

    @Override
	public void dispense() {
        System.out.println("没有糖果分配了");
    }
    
	@Override
	public String toString() {
		return "等待转动曲柄";
	}

}
